<?php
namespace app\app\util;
use think\cache\driver\Redis;
use think\Request;

// 登陆用户id前缀
define('SID_PREFIX', 'hmp:online:sid:');
// 登陆信息过期时间
define('OVERDATETIME', 15*24*60*60);
// redis处理用户登陆类的hash
define('ID_TOKEN','hmp:id:token');


class OnlineUtils{

    // 用户名密码登陆
    public static function login($sid='',$user=[]){
        $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
        $redis->set(SID_PREFIX.$sid,$user,OVERDATETIME);
        return true;
    }

    //hash存储用户信息,实现单点登录
    // public static function hashLogin($sid='',$id='',$user=[]){
    //     $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
    //     //若已在其他设备登录，即强制下线
    //     if($redis->hexists(ID_TOKEN,$id)){
    //         $token = $redis->hget(ID_TOKEN,$id);
    //         $redis->rm(SID_PREFIX.$token);
    //         $redis->hdel(SID_PREFIX,$id);
    //     }
    //     $redis->hmset(ID_TOKEN,$user);
    //     return true;
    // }

    // sid登陆
    public static function sidLogin($sid='',$user=[]){
        $request = Request::instance();
        $header = $request->header();
        $sid = $sid=='' ? $header['token'] : $sid;
        $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
        if($redis->set(SID_PREFIX.$sid,$user,OVERDATETIME)){
            return true;
        }else{
            return false;
        }
    }

    // 根据sid得到用户信息
    public static function getUserInfoBySid($sid=''){
        $request = Request::instance();
        $header = $request->header();
        $sid = $sid=='' ? $header['token'] : $sid;
        $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
        if($redis->has(SID_PREFIX.$sid)){
            $user = $redis->get(SID_PREFIX.$sid);
            return $user;
        }else{
            return false;
        }
    }

    // // 根据sid更新用户信息
    // public static function updateUserInfoBySid($user,$sid=''){
    //     $request = Request::instance();
    //     $header = $request->header();
    //     $sid = $sid=='' ? $header['token'] : $sid;
    //     $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
    //     if($redis->has(SID_PREFIX.$sid)){
    //         $redis->set(SID_PREFIX.$sid,$user,OVERDATETIME);
    //         return true;
    //     }else{
    //         return false;
    //     }
    // }

    // 根据sid得到用户id
    public static function getUserIdBySid($sid=''){
        $request = Request::instance();
        $header = $request->header();
        $sid = $sid=='' ? $header['token'] : $sid;
        $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
        if($redis->has(SID_PREFIX.$sid)){
            $user = $redis->get(SID_PREFIX.$sid);
            return $user['id'];
        }else{
            return false;
        }
    }

    // // 根据sid得到用户名
    // public static function getUserNameBySid($sid=''){
    //     $request = Request::instance();
    //     $header = $request->header();
    //     $sid = $sid=='' ? $header['token'] : $sid;
    //     $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
    //     if($redis->has(SID_PREFIX.$sid)){
    //         $user = $redis->get(SID_PREFIX.$sid);
    //         return $user['username'];
    //     }else{
    //         return false;
    //     }
    // }

    // 请求是否登陆
    public static function requestIsLogin(){
        $request = Request::instance();
        $header = $request->header();  
        $sid = $header['token'] ? $header['token'] : '';
        $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
        if($redis->has(SID_PREFIX.$sid)){
            return true;
        }else{
            return false;
        }
    }

    // // 登出
    // public static function loginout(){
    //     $request = Request::instance();
    //     $header = $request->header();  
    //     $sid = $header['token'] ? $header['token'] : '';
    //     $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
    //     $redis->rm(SID_PREFIX.$sid);
    // }

    // //获取用户经验值
    // public static function getUserExperience($experience,$user_id)
    // {
    //     $redis = new Redis(['host'=>config('REDIS_HOST'),'password'=>config('REDIS_AUTH')]);
    //     if($redis->get(USER.$user_id)){
    //         $userExperience = $redis->get(USER.$user_id);
    //     }else{
    //         $userExperience = 0;
    //     }
    //     $redis->set(USER.$user_id,$userExperience+$experience,OVERDATETIME);
    //     if($redis->get(USER.$user_id) >= 30){
    //         return false;
    //     }else{
    //         return true;
    //     }
    // }

}
